Programmable ICs may be programmed by a user to perform specified logic functions. One type of programmable IC, known as a field programmable gate array (FPGA), typically includes programmable resources that are arranged in an array of programmable tiles including, for example, input/output blocks (IOBs), configurable logic blocks (CLBs), dedicated random access memory blocks (BRAM), multipliers, digital signal processing (DSPs) blocks, processors, clock managers, delay lock loops (DLLs), bus or network interfaces such as Peripheral Component Interconnect Express (PCIe) and Ethernet and so forth. Programmable ICs provide flexible hardware solutions that are advantageous for high performance parallel computing in advanced digital communications and video applications.
Programming data used to configure a programmable IC is often very complex. The complexity may be managed by designing circuits at higher levels of abstractions. For instance, using a hardware description language (HDL), circuits can be designed at the gate level, the register transfer level (RTL), and higher logical levels. Circuits may be combined and augmented to form higher-level modules. System-level integration may rely on reuse of a library of previously created logic blocks including, for example, adders, multipliers, filters, and other arithmetic and DSP functions from which system designs can be readily constructed.
Computer aided design (CAD) tools provide a mechanism for users to quickly visualize, connect, and modify objects of a system level design using a graphical user interface (GUI). Using CAD tools, circuit designs can be assembled using a graphical user interface, translated into a hardware description language (e.g., HDL and VHDL), and synthesized into hardware configuration data. Some CAD tools used for circuit design also provide a mechanism for simulation and debugging of circuit designs.
Some CAD tools include one or more backend processes that maintain a data representation of the objects and connections of a programmable IC and a separate GUI process that renders objects and connections of the programmable IC for display to a user. Communication of data between the backend processes and the GUI process of a CAD tool can pose a significant challenge. For instance, in some CAD systems, graphics modeling data for each object to be displayed to a user is individually communicated to from backend processes to a GUI. Such implementations require large amount of graphics modeling data to be communicated to the GUI for display. Furthermore, in some implementations backend processes and the GUI may be written in different source languages (e.g., C++ and Java), making efficient communication of graphics data more difficult.